#ifndef NANE_ILOGGER_H
#   define NANE_ILOGGER_H

#   include "nane/core/enum.h"

namespace nane
{
    struct ELogMessageLevel
        : public Enum<ELogMessageLevel>
    {
        enum domain
        {
            Error = 0,
            Warning,
            Info,
            Debug,

            _max
        };
        
        static const char* toString( ELogMessageLevel _messageLevel )
        {
            switch(_messageLevel.raw_value())
            {
                case Error:
                    return "Error";
                case Warning:
                    return "Warning";
                case Info:
                    return "Info";
                case Debug:
                    return "Debug";
                default:
                    ;
            }
            return "";
        }        
        NANE_ENUM( ELogMessageLevel, Enum );
    };

    struct ILogger
    {
        virtual void Log( const char* _message, const char* _file, const char* _line
                        , const char* _function, ELogMessageLevel::raw_type _messageLevel ) = 0;
    };
}

#endif  // NANE_ILOGGER_H
